﻿using System;

namespace SeoulOpenApi.Art
{
	/// <summary>
	/// 서울시 Open API 공연행사 정보
	/// </summary>
	public class ArtService : BaseService
	{
		/// <summary>
		/// 서울시 API 서비스
		/// </summary>
		public ArtService() : this(null, null) { }

		/// <summary>
		/// 서울시 API 서비스
		/// </summary>
		/// <param name="userId">서울시 API접속 ID</param>
		/// <param name="authKey">서울시로부터 발급받은 인증키</param>
		/// <remarks>인증키 발급: http://mobile.openapi.seoul.go.kr/ </remarks>
		public ArtService(string userId, string authKey)
		{
			base.UserID = userId;
			base.AuthKey = authKey;
		}


		/// <summary>
		/// 서비스 항목에 따라 데이터 가져오기
		/// </summary>
		/// <param name="name">서비스명</param>
		/// <returns></returns>
		protected override SoapData getSoapData(string name)
		{
			var soap = new SoapData { Address = new Uri(ApiUrlPrefix + "ArtService?wsdl", UriKind.Absolute) };
			switch (name)
			{
				case "searchTitleCategoryList":
					soap.Name = "searchTitleCategoryList";
					soap.Description = "공연행사 주제분류 목록 검색";
					soap.SoapBody = "<ns:searchTitleCategoryList xmlns:ns='http://service.art.culture.openapi.ubizvalley.com'>" +
									"</ns:searchTitleCategoryList>";
					break;
				case "searchThemeCategoryList":
					soap.Name = "searchThemeCategoryList";
					soap.Description = "공연행사 테마분류 목록 검색";
					soap.SoapBody = "<ns:searchThemeCategoryList xmlns:ns='http://service.art.culture.openapi.ubizvalley.com'>" +
									"</ns:searchThemeCategoryList>";
					break;
				case "searchSubjCodeArtList":
					soap.Name = "searchSubjCodeArtList";
					soap.Description = "주제분류별 공연행사 검색";
					soap.SoapBody = "<ns:searchSubjCodeArtList xmlns:ns='http://service.art.culture.openapi.ubizvalley.com'>" +
									"<ns:subjCode>{0}</ns:subjCode>" + // 변수: 주제분류코드
									"<ns:sortItem>{1}</ns:sortItem>" + // 변수: 정렬기준항목
									"<ns:sortStd>{2}</ns:sortStd>" + // 변수: 정렬기준
									"<ns:cPage>{3}</ns:cPage>" + // 변수: 현재페이지
									"<ns:pageSize>{4}</ns:pageSize>" + // 변수: 한페이지ROW수
									"</ns:searchSubjCodeArtList>";
					break;
				case "searchThemeCodeArtList":
					soap.Name = "searchThemeCodeArtList";
					soap.Description = "테마분류별 공연행사 검색";
					soap.SoapBody = "<ns:searchThemeCodeArtList xmlns:ns='http://service.art.culture.openapi.ubizvalley.com'>" +
									"<ns:themejCode>{0}</ns:themejCode>" + // 변수: 테마분류코드
									"<ns:sortItem>{1}</ns:sortItem>" + // 변수: 정렬기준항목
									"<ns:sortStd>{2}</ns:sortStd>" + // 변수: 정렬기준
									"<ns:cPage>{3}</ns:cPage>" + // 변수: 현재페이지
									"<ns:pageSize>{4}</ns:pageSize>" + // 변수: 한페이지ROW수
									"</ns:searchThemeCodeArtList>";
					break;
				case "searchTitleArtList":
					soap.Name = "searchTitleArtList";
					soap.Description = "공연행사 명 검색";
					soap.SoapBody = "<ns:searchTitleArtList xmlns:ns='http://service.art.culture.openapi.ubizvalley.com'>" +
									"<ns:title>{0}</ns:title>" + // 변수: 공연행사명
									"<ns:sortItem>{1}</ns:sortItem>" + // 변수: 정렬기준항목
									"<ns:sortStd>{2}</ns:sortStd>" + // 변수: 정렬기준
									"<ns:cPage>{3}</ns:cPage>" + // 변수: 현재페이지
									"<ns:pageSize>{4}</ns:pageSize>" + // 변수: 한페이지ROW수
									"</ns:searchTitleArtList>";
					break;
				case "searchAddressArtList":
					soap.Name = "searchAddressArtList";
					soap.Description = "공연행사 장소명 검색";
					soap.SoapBody = "<ns:searchAddressArtList xmlns:ns='http://service.art.culture.openapi.ubizvalley.com'>" +
									"<ns:place>{0}</ns:place>" + // 변수: 장소명
									"<ns:sortItem>{1}</ns:sortItem>" + // 변수: 정렬기준항목
									"<ns:sortStd>{2}</ns:sortStd>" + // 변수: 정렬기준
									"<ns:cPage>{3}</ns:cPage>" + // 변수: 현재페이지
									"<ns:pageSize>{4}</ns:pageSize>" + // 변수: 한페이지ROW수
									"</ns:searchAddressArtList>";
					break;
				case "searchPeriodArtList":
					soap.Name = "searchPeriodArtList";
					soap.Description = "공연행사 장소명 검색";
					soap.SoapBody = "<ns:searchPeriodArtList xmlns:ns='http://service.art.culture.openapi.ubizvalley.com'>" +
									"<ns:searchStartDate>{0}</ns:searchStartDate>" + // 변수: 검색시작일
									"<ns:searchEndDate>{1}</ns:searchEndDate>" + // 변수: 검색종료일
									"<ns:sortItem>{2}</ns:sortItem>" + // 변수: 정렬기준
									"<ns:sortStd>{3}</ns:sortStd>" + // 변수: 정렬기준
									"<ns:cPage>{4}</ns:cPage>" + // 변수: 현재페이지
									"<ns:pageSize>{5}</ns:pageSize>" + // 변수: 한페이지ROW수
									"</ns:searchPeriodArtList>";
					break;
				case "getArtInfo":
					soap.Name = "getArtInfo";
					soap.Description = "공연행사 장소명 검색";
					soap.SoapBody = "<ns:getArtInfo xmlns:ns='http://service.art.culture.openapi.ubizvalley.com'>" +
									"<ns:cultCode>{0}</ns:cultCode>" + // 변수: 문화행사코드
									"</ns:getArtInfo>";
					break;
			}

			// 해당 서비스가 없는 경우
			if (String.IsNullOrEmpty(soap.Name))
				throw new Exception(name + " not found.");

			return soap;
		}
	}
}
